Public Class Individuo

    Public Estructura() As Integer
    Public Longitud As Integer = 0
    Public Aptitud As Decimal = 0
    Public Valido As Boolean = False


    Public Sub generarAleatorio(ByVal origen As Integer, ByVal destino As Integer, ByVal cantCiudades As Integer, ByVal generador As Random)
        Dim ciudades As New ArrayList()
        Dim ciudadAleatoria As Integer
        Dim ciudadSeleccionada As Integer

        Dim tam As Integer = generador.Next(1, cantCiudades)

        Dim arregloTemporal(tam) As Integer

        'Cargo los valores de origen y destino en la primera y ultima posicion
        arregloTemporal(0) = origen
        arregloTemporal(tam) = destino

        tam -= 1

        'Genero un arreglo con las ciudades restantes
        For i As Integer = 1 To cantCiudades
            If i <> origen And i <> destino Then
                ciudades.Add(i)
            End If
        Next

        'Cargo las posiciones restantes del cromosoma con las ciudades restantes
        For j As Integer = 1 To tam
            ciudadAleatoria = generador.Next(0, ciudades.Count)
            ciudadSeleccionada = ciudades(ciudadAleatoria)
            arregloTemporal(j) = ciudadSeleccionada
            ciudades.Remove(ciudadSeleccionada)
        Next

        Me.estructura = arregloTemporal
        Me.longitud = arregloTemporal.Length
    End Sub

    Public Function Clone()
        Dim nuevoIndividuo As New Individuo()
        nuevoIndividuo.estructura = Me.estructura.Clone()
        nuevoIndividuo.aptitud = Me.aptitud
        nuevoIndividuo.Longitud = Me.Longitud
        nuevoIndividuo.Valido = Me.Valido
        Return nuevoIndividuo
    End Function

    Public Function Comparar(ByVal individuo As Individuo) As Boolean
        Dim iguales As Boolean = True
        If individuo.Longitud <> Me.Longitud Then
            iguales = False
        Else
            For i As Integer = 1 To Me.Longitud - 2
                If individuo.Estructura(i) <> Me.Estructura(i) Then
                    iguales = False
                    Exit For
                End If
            Next
        End If
        Return iguales
    End Function
End Class
